#pragma once

#include "teflon/scene/camera.h"
#include "teflon/core/window.h"
#include "teflon/ui/uilayer.h"
#include "teflon/core/timer.h"
#include <memory>


namespace teflon
{
    struct AppInfo2d
    {
        std::string title;
        uint32_t window_width;
        uint32_t window_height;
    };

    class Application2d
    {
    protected:
        std::shared_ptr<Window> window;
        AppInfo2d info;

    public:
        Application2d(const AppInfo2d& info);
        ~Application2d() {}

        void Run();

        bool Closed() const;
        void BeginFrame();
        void EndFrame();
        
        virtual void Update() {}
        virtual void Render() {}

    protected:
        void InitWindow();
    };
}
